λ terraform import
Terraform importするコマンド
既存のインフラリソースをtfstateに登録できる
docs
tutorial
#wip
注意点
コードは事前に手書きで用意する必要がある
terraform importはstateのみ更新する
コード自動生成はしない
同じリソースを複数のアドレスにインポートすると不具合が起きる可能性がある
1回のコマンドでインポートできるのは1リソースだけ
例えばAWSのVPCのように複数リソースをまとめてはできない
ローカル実行のみ対応
流れ
1. リソースブロックを書く
対象リソースの空のTerraformコードを先に書く
「リソースタイプ」「リソース名」の指定のみで良い
code:hcl(rb)
resource "aws_instance" "example" {
# ...まだ中身は書かなくてOK
}
2. terraform import コマンドを実行
$ terraform import aws_instance.example i-abcd1234
aws_instance.example は Terraform 上のリソースアドレス
i-abcd1234 は AWS EC2 のリソースID
この操作で、Terraformは既存リソースをstateに登録する
IDの書き方はリソースごとに異なる
e.g.
AWS EC2インスタンス → インスタンスID(例: i-abcd1234)
AWS Route53 ゾーン → ドメイン名(例: example.com)
3. terraform plan で差分確認
terraform plan を実行して、現在のstateとコードの差分を確認する
差分を見ながら、先程のここに手動で追記していく
code:hcl(rb)
resource "aws_instance" "example" {
# ここに追記していく
}
コマンドオプション
https://developer.hashicorp.com/terraform/cli/commands/import
$ terraform import options ADDRESS ID
例
① 単純なリソース
code:bash
terraform import aws_instance.foo i-abcd1234
② モジュール配下
code:bash
terraform import module.foo.aws_instance.bar i-abcd1234
③ count指定あり
code:bash
terraform import 'aws_instance.baz0' i-abcd1234
オプション一覧(代表的なもの)
table:_
オプション 説明
-config=path 使用するTerraform設定ファイルのディレクトリパス。デフォルトは現在のディレクトリ。
-var 'foo=bar' 変数の値を指定。複数指定可能。
-var-file=foo 変数ファイルを指定。複数指定可能。
-lock=false ステートロックを無効化(※基本非推奨)
-input=true プロバイダー設定をインタラクティブに入力できるようにする。
-no-color 出力の色付けを無効化。
-parallelism=n 並列処理の数を制限(デフォルトは10)。
/mrsekut-book-4814400527/399
https://dev.classmethod.jp/articles/aws-with-terraform/
https://dev.classmethod.jp/articles/terraform-import-twoway/
https://qiita.com/empty948/items/f5707be8077dba995978
このへん使うと便利だったりするらしい
Terraformer
TerraCognita
Reads from existing public and private cloud providers (reverse Terraform) and generates your infrastructure as code on Terraform configuration
https://github.com/cycloidio/terracognita